﻿jQuery().ready(function () {
    serialiseTags();
    jQuery('input.tags').autoGrowInput({
        comfortZone: 5,
        minWidth: 10,
        maxWidth: 200
    });


    jQuery('#' + autoTags.clearButton).click(function (e) {
        if (confirm("You are about to remove all tags, do you wish to continue?")) {
            jQuery('div.tags li').remove();
            serialiseTags();
        }
        e.preventDefault();
        return false;
    });

    jQuery('div.tagsContainer > div').click(function (eve) {
        var n = eve.target.nodeName.toLowerCase();
        if (n == 'div' || n == 'ul') {

            addTag();
            eve.preventDefault();
            return false;
        }
    });

    function addTag() {
        if (autoTags.allowUserTags != 'False') {
            jQuery('div.tags ul').append('<li class="active user"><input class="tags active user" type="text" name="gtTags_' + jQuery('div.tags li').size() + '" value="" size="1" style="width: 25px;"/> <span>x</span></li>');

            jQuery('input.tags').autoGrowInput({
                comfortZone: 5,
                minWidth: 10,
                maxWidth: 200
            });

            jQuery('input.tags:last').focus();
        }
    }

    jQuery('.tags a').live('click', function () {
        if (jQuery(this).attr('id').indexOf('body_TabView') > -1) {
            jQuery('input.tags').autoGrowInput({
                comfortZone: 5,
                minWidth: 10,
                maxWidth: 200
            });
        }
    });

    jQuery('input.tags').live('keypress', function (e) {
        if (e.keyCode === 9) {
            addTag();
            e.preventDefault();
            return false;
        }
    });

    jQuery('input.tags').live('blur', function (e) {
        serialiseTags();
    });

    // Only hook up events if generateTagsAutomatically is set
    if (autoTags.generateTagsAutomatically != 'False') {

        jQuery('form textarea').blur(function () {
            jQuery('div.tags li').remove();
            RequestTags();
        });

        jQuery('form input:not(.tags ul li input, .tagsNotification input)').live('blur', function () {
            jQuery('div.tags li').remove();
            RequestTags();
        });
    }

    function saveNotification() {
        jQuery('div.autoTagsStatus').html('<img src="' + autoTags.spinnerImage + '" width="16" height="16"/> Saving tags');
    }

    jQuery('div.tags ul li span').live('click', function () {
        jQuery(this).parent().fadeOut(300, function () { jQuery(this).remove(); });
        serialiseTags();
    });

    jQuery('div.tags ul li').live('mousedown', function (e) {

        if (e.button == 2) {
            if (jQuery(this).hasClass('active')) {
                jQuery(this).removeClass('active');
                jQuery('input', this).removeClass('active');
            } else {
                jQuery(this).addClass('active');
                jQuery('input', this).addClass('active');
            }

            e.preventDefault();
            serialiseTags();
            return false;
        }
    });


    jQuery('#' + autoTags.tagbutton).click(function () {
        RequestTags();

        return false;
    });
});

function TagInList(list, tag) {

    var i = 0;
    for (i = 0; i < list.length; i++) {
        if (jQuery.trim(jQuery(list[i]).val().toLowerCase()) == jQuery.trim(tag.toLowerCase())) {
            return true;
        }
    }

    return false;
}

function isNullOrEmpty(obj) {
    return (obj == null || obj == undefined || obj == '');
}

function RequestTags() {
    jQuery('div.autoTagsStatus').html('<img src="' + autoTags.spinnerImage + '" width="16" height="16"/> Getting tags');

    jQuery('div.autoTagsStatus').show();
    var postData = '';

    if (!isNullOrEmpty(autoTags.aliasesToUse)) {
        addClassToFormElementsWithIds(autoTags.aliasesToUse.split(','), 'autotags-include');
        postData = jQuery('form .autotags-include').fieldSerialize();
    }
    else if (!isNullOrEmpty(autoTags.aliasesToExclude)) {
        addClassToFormElementsWithIds(autoTags.aliasesToExclude.split(','), 'autotags-exclude');
        postData = jQuery('form :not(.autotags-exclude)').fieldSerialize();
    } else {
        postData = jQuery('form').serialize();
    }

    autoTags.requests++;

    var requestType = '';
    if ($('.multiNodePicker').length > 0) {
        requestType = 'GET';
    } else {
        requestType = 'POST';
    }

    jQuery.ajax({
        type: requestType,
        url: '/base/AutoTags/GetTags/' + autoTags.nodeId + '.aspx',
        data: postData,
        cache: false,
        success: function (data) {
            autoTags.requests--;
            if (PopulateTags(data)) {

                jQuery('div.autoTagsStatus').hide();
            }

        },
        error: function() { autoTags.requests--; },
        dataType: 'json'
    });
}

function addClassToFormElementsWithIds(collectionOfIds, classToAdd) {
    for (i in collectionOfIds) {
        var ele = jQuery('form *[idjQuery="' + collectionOfIds[i] + '"]');
        ele.addClass(classToAdd);
    }
}

function serialiseTags() {
    var tags = new Array();
    jQuery('div.tags ul li input.active').each(function () {
        var v = jQuery(this).val();
        if (v.length > 0) {
            tags.push(v);
        }
    });

    jQuery('#' + autoTags.hiddenField).val(tags.join(','));

}

function PopulateTags(data) {

    if (data.error) { jQuery('div.autoTagsStatus').html(data.error); return false; }

    var res = data;
    if (res == null || res.items == null) { return false; }

    var keys = new Array();
    jQuery(res.items).each(function () {
        keys.push(this);
    });

    if (keys.length == 0) {
        jQuery('div.autoTagsStatus').html('No tags could be genereated for the provided content');

        jQuery('div.autoTagsStatus').show();

        return false;
    }

    keys.sort();

    var selected = res.autoAdd == true ? ' active' : '';

    var i = 0;
    jQuery(keys).each(function () {
        var items = jQuery('div.tags ul li input');

        if (!TagInList(items, this)) {
            var listElement = '';

            if (res.autoAdd) {
                listElement = '<li class="active"><input class="tags active suggested" type="text" name="gtTags_' + i + '" value="' + this + '"/> <span>x</span></li>'
            } else {
                listElement = '<li><input class="tags suggested" type="text" name="gtTags_' + i + '" value="' + this + '"/> <span>x</span></li>'
            }

            jQuery('div.tags ul').append(listElement);
            i++;
        }
    });

    serialiseTags();

    jQuery('input.tags').autoGrowInput({
        comfortZone: 5,
        minWidth: 10,
        maxWidth: 200
    });

    return true;
}
